查看原文
其他

WWW服务器、Xinetd 、SSH 安全防护

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:16004488



微信公众号:计算机与网络安全

ID:Computer-network

一、WWW 服务器的安全防护


随着WWW服务使用的日益广泛,WWW服务器的访问控制和安全性能保障也就成了一个重要的内容。WWW服务器的安全配置,主要是这样几个问题,一个对网页的访问进行访问权限控制,另外一个是防止服务器受到拒绝服务攻击的影响。以下我们主要针对两种最常见的WWW服务器,Apache和IIS,讨论如何进行安全配置


Apache 可以很好地解决上述问题。Apache 实现身份认证的基本原理是:当系统管理员启动身份认证功能后,可以在要限制的目录中添加一个默认名“.htaccess”的文件。当用户访问该路径下的资源时,系统就会弹出一个对话框,要求用户输入“用户名/口令”。也就是说,它的身份认证功能不是人为由程序控制,而是由系统直接控制的。这样就避免了用户记录需要认证的资源的超级链接,不会下次直接访问资源。不仅如此,apache的身份认证的限制有多种,可以限定某个目录的读取权,针对IP地址进行的限制,以及一个目录下各子目录的不同限制。以下我们具体进行说明。


若对某一目录下的文件如/home/ftp/pub 需要做到用户认证,则在 httpd.conf 中加入下面的行:


<Directory  /home/ftp/pub>

options  indexes  followsymlinks

allowoverride  authconfig

order allow,deny

allow  from  all

</Directory  >


在目录/home/ftp/pub下放文件.htaccess,内容如下:


authname  "shared  files"

authtype  basic

authuserfile  /etc/.passwd

require  valid-user


用随Apache来的程序htpasswd 生成文件/etc/.passwd,每行一个用户名:密码。只要能提供正确的用户名和密码对,就允许登录访问,这是针对任何地址来的请求都要求提供用户名和密码认证。

以上是对用户进行的身份认证。如果需要对客户的来源地址进行认证,比如说,需要禁止来自于192.168.0.1的访问,则可以在httpd.conf中加入:


<Directory  /home/ftp/pub>

Options  Indexes  FollowSymLinks

AllowOverride  AuthConfig

order deny,allow

deny  from  192.168.0.1

allow  from  all

</Directory>


综合使用这两项,可以设置一些较为复杂的访问权限控制。例如对同一目录及其下的子目录设置不同的权限。例如要求用户 user1、user2、user3 都需要用户名和密码进入/home/ftp/pub,但是仅user1、user2能进入/home/ftp/pub/sales。则可以使用如下的配置:


<Directory  /home/ftp/pub>

Options  Indexes

AllowOverride  AuthConfig

order allow,deny

allow  from  all

</Directory>

<Directory  /home/ftp/pub/sales>

Options  Indexes

AllowOverride  AuthConfig

order allow,deny

allow  from  all

</Directory>


设置/home/ftp/pub/.htaccess为:


AuthName  "shared  files"

AuthType  Basic

AuthUserFile  /etc/.passwd

require  valid-user


设置/home/ftp/pub/sales/.htaccess:


AuthName  "shared  files"

AuthType  Basic

AuthUserFile  /etc/.passwd

AuthGroupFile  /etc/.salesgroup

require  group  manager


设置文件/etc/.passwd内容为:


user1:passwd1

user2:passwd2

user3:passwd3


这样就实现了上述内容。


除了Apache之外,IIS(Internet Information Server)是另外一种流行的Web服务器,通常用于Windows 操作系统上。由于基于Windows系统的WWW服务器近年来数量的不断增加,IIS的使用也日渐广泛。以下我们主要就IIS 来介绍其中用户认证和基于IP地址的访问控制。


IIS系统可以提供匿名访问模式,它不需要与用户之间进行交互,允许任何人匿名访问站点。除此之外,IIS可以提供三种用户认证方式,它们分别是基本认证方式、基于摘要的认证方式以及类似 Windows 的认证方式。基本(Basic)验证方式下用户输入的用户名和口令以明文方式在网络上传输,没有任何加密,非法用户可以通过网上监听来拦截数据包,并从中获取用户名及密码,安全性能一般;基于摘要的认证方式相对来说要安全一些,用户名、密码、以及其他一些相关信息一起计算出一个 hash值。这个hash值连带其他一些明文信息被传给服务器,服务器通过计算来判断认证是否通过。由于没有用户名和密码的网上明文传输,所以相对来说要安全一些,但是它无法抵抗如下几种攻击:转发攻击、中间人攻击、假冒等。因此也不是一种很强的认证方式。最后一种虽然最安全,但是却只有IE才提供支持。


对于IIS的各个目录,都可以利用ISM来配置这个目录的访问权限。具体步骤如下:


(1)启动ISM(Internet Server Manager);

(2)启动WWW服务属性页;

(3)点击目录安全,然后即出现针对用户认证的访问控制配置以及针对来源IP地址的访问控制。可以根据自己的需要进行合理配置。


除此之外,已经设置成Web目录的文件夹,可以通过操作Web站点属性页实现对WWW目录访问权限的控制,而该目录下的所有文件和子文件夹都将继承这些安全性。WWW服务除了提供NTFS文件系统提供的权限外,还提供读取权限,允许用户读取或下载WWW目录中的文件;执行权限,允许用户运行WWW目录下的程序和脚本。具体设置方法:


(1)启动ISM(Internet服务器管理器);

(2)启动Web属性页并选择“目录”选项卡;

(3)选择WWW目录;

(4)选择“编辑属性”中的“目录属性”进行设置。


以上我们简要介绍了WWW服务器的几个常见安全配置。


二、Xinetd 超级守护程序配置


由于更为出色的安全配置功能和性能,在较新的Linux系统中,都用Xinetd取代了原有的inetd。Xinetd在以下的几个方面具有inetd所无法比拟的优点:


访问权限控制:Xinetd可以用与tcpwrapper相似的语法来配置访问权限。这样可以限制客户来自于哪些地址段,或者不能来自于哪些地址段。


访问时间控制和占用资源控制:Xinetd可以配置该服务的允许访问时间,也可以配置每个服务所允许的最大资源限制。资源限制包括CPU、内存、数据段、堆栈段等。


更灵活的审计策略指:Xinetd可以进行更灵活的审计策略。可以记录于syslog,也可以记录于文件,可以自己选择记录什么数据。


这样,Xinetd可以提供更强大的访问控制。以下我们简要介绍Xinetd的配置。以下是一个典型的服务配置文件:


service  shell

{

socket_type     =stream

protocol        =tcp

wait               =no

user               =root

server            =/usr/sbin/in.rshd

}


上面的例子即是 shell 服务(514 端口)的配置文件。显然,其配置格式要比 inetd.conf来说要更易懂一些。对这一服务增加新的配置选项,只要在扩号中增加新的一行就可以了。首先我们增加新的基于源IP地址的访问控制。对于xinetd来说,由两个关键字可以配置针对源IP地址的访问控制。这两个关键字分别是only_from和no_access。其中only_from配置允许的源IP地址,而no_access配置禁止的来源IP地址,当一个IP地址同时被两者所包含时,那么禁止访问适用。它们可以识别如下几种格式的源IP指定:


IP地址:比如说:192.168.0.1。


网络名:该网络名是在/etc/networks里面设置了的。


CIDF格式:比如说:192.168.0.1/24,表示192.168.0.这个C类网。


域名:比如说:.edu.cn。当指定域名时,每次当有新的服务请求时,系统都将进行一次反向DNS查询,这样以便判定来源客户是否满足条件。


需要制定多个限制时,用空格隔开。下面就是添加了访问控制的shell服务配置:


service  shell

{

socket_type     =stream

protocol        =tcp

wait               =no

user               =root

server            =/usr/sbin/in.rshd

only_from       =192.168.0.1  192.168.1.1/24  .edu.cn

no_access       =192.168.1.135

}


这样可以容易地控制哪些IP地址禁止登录,哪些可以。加入服务限制条件,可以更好地管理系统。


Xinetd的另外一个显著的安全特性就是对系统资源访问限制的控制。近年来,随着拒绝服务攻击的不断涌现,保障服务的可用性也成为了一个大的问题。Xinetd可以通过以下的几个参数来限制服务最大使用系统资源数目。


per_source:这个参数限制来源于同一个IP地址的最多服务请求。多于则被丢弃。


cps:这个参数用于限制每秒的连接数目。


max_load:这个参数用于限制该服务所能够承受的最大负载。


除此之外,Xinetd还可以就系统所使用的CPU资源、内存资源等方面进行更为详细的配置。我们使用这些参数配置shell服务,例子如下:


service  shell

{

socket_type     =stream

protocol        =tcp

wait               =no

user               =root

server            =/usr/sbin/in.rshd

only_from       =192.168.0.1  192.168.1.1/24  .edu.cn

no_access       =192.168.1.135

max_load         =2

cps                =5

per_source      =1

}


以上我们简要介绍了Xinetd的访问控制设置和一些防止拒绝服务攻击的方法。


三、SSH


SSH协议在开始设计时的目的就是:提供尽可能安全的远程存取方式。它可以用来进行任何基于网络的信息传递,而且适应性很强。Linux、UNIX、NT等系统都可以使用。由于在和远程交互时,传递的密钥、认证信息等都是加密的,所以安全性能很好。由于其版权的限制,近年来另外一个公开源代码的SSH服务器正在得到越来越广泛的应用。


我们将首先介绍 SSH 服务器的配置以及端口转发隧道功能,然后我们将简要介绍Openssh的一些配置。


SSH服务器的配置文件是/etc/ssh2/sshd_config,典型配置如下:


Port  22

# 这一参数配置SSHD监听的端口。

ListenAddress  0.0.0.0

# 这一项配置SSHD监听的地址,0.0.0.0说明对本系统上的所有接口都进行监听。

LoginGraceTime  300

# 如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。

PermitRootLogin  no

# 是否允许超级用户登录

IgnoreRhosts  yes

# 是否忽略.rhost文件

StrictModes  yes

# 设置ssh在接收登录请求之前是否检查用户HOME目录和rhosts文件的权限和所有权。

# 这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。

QuietMode  no

# 审计模式。如果为yes的话就不进行任何审计记录。

AllowX11Forwarding  no

# 是否转发X数据包,我们将在下一部分详细介绍。

PrintMotd  yes

# 是否打印motd

KeepAlive  yes

# 是否进入keepalive模式。

SyslogFacility  DAEMON

# 以何种方式审计

AllowAuthentications password,publickey

#允许的认证方式是密码和公钥

PermitEmptyPasswords  no

# 是否允许空密码

其他有用的规则还有:

AllowGroups –显式规定允许使用SSH登录的组(/etc/group)

DenyGroups  – 显式规定禁止使用SSH登录的组(/etc/group)

AllowUsers  - 显式规定允许使用SSH登录的用户

DenyUsers   – 显式规定禁止使用SSH登录的用户

AllowHosts  –允许的主机,其余禁止。

DenyHosts   – 禁止的主机,其余开放。

IdleTimeout time – 规定的超时时间(minutes/hours/days/),超时则强行发送 SIGHUP信号退出处理过程。


SSH还有另一项非常有用的功能,就是它的端口转发隧道功能,利用此功能,它可以让一些不安全的服务像POP3、SMTP、FTP、LDAP等通过SSH的加密隧道传输,这样即使这些服务本身是不安全的,其他中间媒介也无法监听了。SSH的加密隧道保护的只是中间传输的安全性,使得任何通常的嗅探工具软件无法获取发送内容。这一功能最常用于对X数据的加密传输当中。在以上例子中,如果我们设置了AllowX11Forwarding项为yes之后,就可以在本地使用远程X界面,而所有数据都经过SSH加密传输了。


SSH本身有版权限制,而其所使用算法的也有一定的版权限制。为了解决这一问题,近年来,OpenSSH用户数目越来越多。很多 Linux系统都缺省安装了 openssh。它是自由软件而且使用不受专利保护的加密算法。


“/etc/ssh/sshd_config”是OpenSSH的配置文件,其配置格式与以上所讲基本相同,所不同的是,ssh 2.0 以上的版本,使用了很多新的参数配置项。因此,我们也介绍一下 openssh的参数配置。以下就是一个典型的配置文件。


#  This  is  ssh  server  systemwide  configuration  file.

Port  22

ListenAddress  192.168.1.1

HostKey  /etc/ssh/ssh_host_key

ServerKeyBits  1024

LoginGraceTime  600

KeyRegenerationInterval  3600

PermitRootLogin  no

IgnoreRhosts  yes

IgnoreUserKnownHosts  yes

StrictModes  yes

X11Forwarding  no

PrintMotd  yes

SyslogFacility  AUTH

LogLevel  INFO

RhostsAuthentication  no

RhostsRSAAuthentication  no

RSAAuthentication  yes

PasswordAuthentication  yes

PermitEmptyPasswords  no

AllowUsers  admin


下面我们介绍一下上一个配置文件中所没有的配置选项。


HostKey /etc/ssh/ssh_host_key:“HostKey”设置包含计算机私人密钥的文件。


ServerKeyBits 1024:“ServerKeyBits”定义服务器密钥的位数。


KeyRegenerationInterval 3600:“KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密钥(如果使用密钥)。重新生成密匙是为了防止用盗用的密钥解密被截获的信息。


IgnoreUserKnownHosts yes:“IgnoreUserKnownHosts”设置 ssh daemon 是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”。


LogLevel INFO:设置记录sshd日志消息的层次。


RhostsRSAAuthentication no:设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。


除此之外,无论是sshd或者是openssh的sshd,都可以从inetd及其类似的超级服务器来启动。使用“-i”即可。下面是一个典型的xinetd配置文件:


service  ssh

{

socket_type       =stream

protocol            =tcp

wait                  =no

user                  =root

server               =/usr/local/sbin/sshd

server_args       =-i

only_from          =192.168.0.1  192.168.1.1/24  .edu.cn

no_access          =192.168.1.135

max_load            =2

cps                   =5

per_source        =1

}


这样启动的好处在于,可以进行更为灵活的配置,避免系统遭到拒绝服务式攻击的影响。对于SSH这样计算度较高的服务,这样做意义尤其显著。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存